
// nodejs 提供了 http 模块，自身就可以用来构建服务器

let http = require("http");
let url = require("url");
let path = require("path");
let fs = require("fs");
let fsp = require("fs/promises");

let {render} = require("./tool/render.js");


let server = http.createServer(); // 创建服务



// 当浏览器发送请求时 => 服务器接收请求 处理 返回响应内容 (站点->前端页面 后端接口-> 业务处理)
server.on("request",async function(req,res){// 每次浏览器向服务器发送请求时都会触发
    // 形参
    // req => 用于存放请求相关的信息 => 请求方式 请求地址 携带数据(get/post) 请求头
    // res => 用于存放和设置响应相关的信息 => 设置状态码 响应正文
    if(req.url != "/favicon.ico") {
        console.log("接收到浏览器发送的请求",req.url); // 浏览器发送请求时的请求地址
        // console.log(req.url);
        var URL = url.parse(req.url,true);  //  对url进行解析  => 对象
        // console.log(URL);

        var {pathname,query} = URL;   // /index.html   查找对象中的路径部分
        console.log(pathname);


        // 渲染站点内的页面  => 访问的路径在站点中存在
        var bool = await render(pathname,res);  // 异步

        if(bool) return false;  // 如果查找的文件在站点中存在 => 后续代码就不执行

        // 除了站点中 文件相关的路径以外  => 还有很多没有使用的路径  => 如果是按站点展示的流程的话 => not found   => 这样服务器只能做站点展示(类似 live server)

        // 需求: 我们的服务器除了站点展示页面 => 还可以作为后端返回数据

        // 除了站点中 文件相关的路径以外  => 还有很多没有使用的路径  => 自定义路径展示数据  => 路由(根据对应路由地址渲染不同的内容)

        
        // 路由(根据对应路由地址渲染不同的内容)
        // 1. 后端路由 作为后端接口  => 服务器接收前端的请求之后 处理()  =>返回数据(text/html/json)
        // 2. 页面路由 => 对应路由地址快捷展示某个页面 
        //    注意: 如果要使用页面路由 => 页面跳转时, 全都用用页面路由



        
        
        // 服务器和浏览器约定好了,如果你访问 /a 这个路径,我就给你返回 data/1.json  => 
        if(pathname === "/reg"){
            render("/html/register.html",res);
        }else if(pathname === "/login"){
            render("/html/login.html",res);
        }else if(pathname === "/test"){
            render("/html/ajax.html",res);
        }else if(pathname === "/main"){
            render("/html/index.html",res);
        }else if(pathname == "/a"){ 
            res.setHeader("Content-Type","text/json;charset=utf-8");
            console.log(query);
            fsp.readFile(path.join(__dirname,"./data/1.json")).then(ctx=>{
                res.write(ctx);
            }).catch(err => {
                res.write(err.stack)
            }).finally(() => {
                res.end()
            })
        }else if(pathname == "/b"){ 
            res.end("hello world");
        }else if(pathname == "/user"){ 
            res.setHeader("Content-Type","text/plain;charset=utf-8");
            res.end("this is 张三!");
        }else {
            res.end("Not Found!");
        }


    }else{
        res.end();
    }

})

// 启动的服务器监听3000端口(闲置端口)  
server.listen(3000,function(){ // 服务器启动时执行的回调函数
    console.log("服务器启动http://127.0.0.1:3000");
})








